package requests

import (
	"errors"
	"fmt"
	"go-web/pkg/model"
	"strings"

	"github.com/thedevsaddam/govalidator"
)

// 初始化函数（包加载时自动执行）
func init() {
	// 添加自定义验证规则"not_exists"，用于检查数据库字段唯一性
	// not_exists:users,email
	govalidator.AddCustomRule("not_exists", func(field string, rule string, message string, value interface{}) error {
		// 解析规则参数：去除前缀并按逗号分割，得到表名和字段名
		rng := strings.Split(strings.TrimPrefix(rule, "not_exists:"), ",")

		// 获取目标数据库表名（第一个参数
		tableName := rng[0]
		// 获取要校验的数据库字段名（第二个参数）
		dbFiled := rng[1]
		// 将待校验值转换为字符串类型
		val := value.(string)

		// 初始化计数器，用于统计数据库中存在该值的记录数
		var count int64
		// 查询指定表中目标字段值存在的记录总数
		model.DB.Table(tableName).Where(dbFiled+" = ?", val).Count(&count)

		// 如果存在重复记录
		if count != 0 {
			// 优先返回自定义错误信息
			if message != "" {
				return errors.New(message)
			}
			// 默认错误信息：提示字段值已被占用
			return fmt.Errorf("%v 已被占用", val)
		}
		return nil
	})
}
